package packagingclass;

import org.junit.Test;

/**
 * @author shkstart
 * @date 2022/5/14 - 18:56
 */

/*
 * 包装类的使用:
 * 1.java提供了8种基本数据类型对应的包装类，使得基本数据类型的变量具有类的特征
 *
 * 2.掌握的：基本数据类型、包装类、String三者之间的相互转换
 *
 *
 *
 */
public class BasicToPackaging {

    //String类型 --->基本数据类型、包装类：调用包装类的parseXxx(String s)
    @Test
    public void test5() {
        String s1 = "123";
//        错误的情况：
//        int num1 = (int)s1;
//        Integer in1 = (Integer)s1;

        int num2 = Integer.parseInt(s1);
        System.out.println(num2 + 1);//124

        String s2 = "true1";
        Boolean b1 = Boolean.parseBoolean(s2);
        System.out.println(b1);//false

    }


    //基本数据类型、包装类--->String类型：调用String重载的valueOf(Xxx xxx)
    @Test
    public void test4() {

        int num1 = 10;
        //方式1：连接运算
        String s1 = num1 + "";
        //方式2：调用String的valueOf(Xxx xxx)
        float  f1 = 13.4f;
        String s2 = String.valueOf(f1);//"13.4"

        Double d1 = new Double(12.6);
        String s3 = String.valueOf(d1);//"12.6"
        System.out.println(s2);
        System.out.println(s3);


    }

    @Test
    public void test3() {
//        int num1 = 19;
//        //基本数据类型-->包装类的对象
//        method(num1);

        //自动装箱：基本数据类型 --->包装类
        int num2 = 10;
        Integer in1 = num2;//自动装箱

        boolean b1 = true;
        Boolean b2 = b1;//自动装箱
        //自动拆箱：包装类--->基本数据类型
        System.out.println(in1.toString());
        int num3 = in1;//自动拆箱


    }



    public void method(Object obj) {
        System.out.println(obj);

    }

    //包装类--->基本数据类型:调用包装类Xxx的xxxValue()
    @Test
    public void test2() {
        Integer in1 = new Integer(12);

        int i1 = in1.intValue();
        System.out.println(i1 + 1);

        Float f1 = new Float(12.3f);
        float f2 = f1.floatValue();
        System.out.println(f1 + 1);
    }




    //基本数据类型 --->包装类：调用包装类的构造器
    @Test
    public void test1() {
        int num1 = 10;
//        System.out.println(num1.toString());

        Integer in1 = new Integer(num1);
        System.out.println(in1.toString());

        Integer in2 = new Integer("123");
        System.out.println(in2.toString());


        //报异常
//        Integer in3 = new Integer("123abc"); //只能是数字，不能是别的
//        System.out.println(in3.toString());

        Float f1 = new Float(13.4f);  //13.4是double类型 13.4f是float类型
        Float f2 = new Float("123");
        System.out.println(f1);
        System.out.println(f2); //保留y一位小数点 123.0


        Boolean b1 = new Boolean(true);
        Boolean b2 = new Boolean("True"); //大写true
        System.out.println(b2);//大写不影响返回值是true
        Boolean b3 = new Boolean("true123");
        System.out.println(b3);//false 内容只能为true不然返回false

        Order order = new Order();
        System.out.println(order.isMale);//false
        System.out.println(order.isFemale);//null


    }
}

class Order {
    boolean isMale;
    Boolean isFemale; //现在 Boolean是个类 没给它初始化 默认为空指针null
}
